package com.yuandian.utils.poi;

import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;

import java.util.HashMap;
import java.util.List;

/**
 * <p> Excel导出拦截单元格，可用于定义某个单元格的样式 </p>
 *
 * @Author: LinShiHe
 * @Date: 2022/3/7 9:44
 */
public class ExcelCellColorSheetWriteHandler implements CellWriteHandler {

    /**
     * key： 第 key 行
     * value: 第 key 行中左右列索引集合
     */
    private HashMap<Integer, List<Integer>> map;

    /**
     * 颜色
     */
    private Short colorIndex;

    private CellStyle cellStyle;

    /**
     * 有参构造
     * @param map
     * @param colorIndex
     */
    public ExcelCellColorSheetWriteHandler(HashMap<Integer, List<Integer>> map, Short colorIndex) {
        this.map = map;
        this.colorIndex = colorIndex;
    }

    /**
     * 无参构造
     */
    public ExcelCellColorSheetWriteHandler() {}

    /**
     * 在创建单元格之前调用
     */
    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {

    }

    /**
     * 在创建单元格之后调用
     */
    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {

    }

    /**
     * 在单元格数据转换后调用
     */
//    @Override
//    public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
//
//    }
//
//    /**
//     * 在单元格上的所有操作完成后调用
//     */
//    @Override
//    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> cellDataList,
//                                 Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
//
//        /**
//         * 考虑到导出数据量过大的情况，不对每一行的每个单元格进行样式设置，只设置必要行中的某个单元格的样式
//         */
//
//        // 当前行的第 i 列
//        int i = cell.getColumnIndex();
//
//        // 根据单元格获取workbook
//        Workbook workbook = cell.getSheet().getWorkbook();
//        // 设置行高
////                    writeSheetHolder.getSheet().getRow(cell.getRowIndex()).setHeight((short) (1.4 * 256));
//
//        // 单元格策略
//        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
//        // 垂直居中
//        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
//        // 水平居中
//        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
//
//        // 边框
//        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
//        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
//        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
//        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
//
//        // 创建字体实例
//        WriteFont cellWriteFont = new WriteFont();
//        // 设置字体大小
//        cellWriteFont.setFontHeightInPoints((short) 12);
//        // 设置字体颜色
//        cellWriteFont.setColor(colorIndex);
//
//        // 单元格颜色
//        contentWriteCellStyle.setWriteFont(cellWriteFont);
//
//        if (cellStyle == null) {
//            cellStyle = StyleUtil.buildContentCellStyle(workbook, contentWriteCellStyle);
//        }
//
//        // 不处理第一和第二行
//        if (cell.getRowIndex() > 1) {
//            List<Integer> integers = map.get(cell.getRowIndex());
//            if (integers != null && integers.size() > 0) {
//                if (integers.contains(i)) {
//
//                    // 设置当前行第 i 列的样式
//                    cell.getRow().getCell(i).setCellStyle(cellStyle);
//                }
//            }
//        }
//    }
}
